/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.util.ArrayList;
import model.dominio.Locacao;
import model.dominio.Veiculo;
import utilitario.ManipularArquivo;
import utilitario.ValidaException;

/**
 *
 * @author Rodrigo
 */
public class DaoVeiculo {

    public static boolean registrarVeiculo(Veiculo veiculo) {
        try {
            ManipularArquivo.salvarNoArquivo(veiculo);
        } catch (ValidaException ex) {
            System.out.println(ex.getMessage());
        }
        return true;
    }

    public static Veiculo buscarVeiculo(int codigo) {
        try {
            Veiculo veiculo = Veiculo.stringToObject(ManipularArquivo.buscarNoArquivo(Veiculo.class.getName(), "codigo", codigo + ""));
            return veiculo;
        } catch (ValidaException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }

    public static ArrayList<Veiculo> buscarVeiculoPorTipo(int codigoTipo) {
        try {
            ArrayList<String> lista = ManipularArquivo.buscarVariosNoArquivo(Veiculo.class.getName(), "tipo", codigoTipo + "");
            ArrayList<Veiculo> v = new ArrayList<Veiculo>();
            for (String s : lista) {
                v.add(Veiculo.stringToObject(s));
            }
            return v;
        } catch (ValidaException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }

    public static ArrayList<Veiculo> buscarVeiculosDisponiveis(int codigoTipo) {
        try {
            ArrayList<Locacao> locacoes = DaoLocacao.buscarLocacoesAbertas();
            Veiculo v;
            ArrayList<Veiculo> veiculos = buscarVeiculoPorTipo(codigoTipo);
            ArrayList<Veiculo> veiculosNaoDisponiveis = new ArrayList<Veiculo>();

            for (Locacao l : locacoes) {
                v = l.getVeiculo();
                if (v.getTipo().getCodigo() == codigoTipo && l.getDataDevolucao() == null) {
                    veiculosNaoDisponiveis.add(v);
                }
            }
            for (Veiculo veiculo : veiculos) {
                veiculo.setDisponivel(true);
                for (Veiculo n : veiculosNaoDisponiveis) {
                    if (n.getCodigo() == veiculo.getCodigo()) {
                        veiculo.setDisponivel(false);
                        break;
                    }
                }
            }
            return veiculos;
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }

    public static ArrayList<Veiculo> buscarLocacoesVeiculos() {
        try {
            ArrayList<String> lista = ManipularArquivo.buscarVariosNoArquivo(Veiculo.class.getName());
            ArrayList<Veiculo> veiculos = new ArrayList<Veiculo>();
            ArrayList<Locacao> locacoes;
            Veiculo v;
            
            for (String s : lista) {
                veiculos.add(Veiculo.stringToObject(s));
            }
            int[][] indices = new int[veiculos.size()][2];
            for (int i = 0; i < veiculos.size(); i++) {
                v = veiculos.get(i);
                locacoes = DaoLocacao.buscarLocacoes("veiculo", v.getCodigo().toString());
                v.setLocacoes(locacoes);
            }

            return veiculos;
        } catch (ValidaException ex) {
            System.out.println(ex.getMessage());
            return null;
        }
    }
}
